package com.example.springboot2022nocv.tengxunapi;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.springboot2022nocv.entity.ChinaTotal;
import com.example.springboot2022nocv.entity.NocvData;
import com.example.springboot2022nocv.service.ChinaTotalService;
import com.example.springboot2022nocv.service.IndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 程序员小洋
 * @version 2022.3
 * @date 2022/12/26 15:40
 * @title
 */
@SuppressWarnings("all")
@Component
public class ChinaTotalScheduleTask {

    @Autowired
    private ChinaTotalService chinaTotalService;

    @Autowired
    private IndexService indexService;

    /**
     * 每小时执行一次 更新全国数据情况
     * @throws IOException
     */
    //@Scheduled(fixedDelay = 1000000)
    @Scheduled(cron = "0 0 8 * * ?") // 每天8点更新
    public void updateChinaTotalToDb() throws IOException, ParseException {
        HttpUtils httpUtils = new HttpUtils();
        String string = httpUtils.getData();
        System.out.println("数据:"+string);

        // 1.所有数据的alibaba格式
        JSONObject jsonObject = JSONObject.parseObject(string);
        Object data = jsonObject.get("data");
        System.out.println("data:"+data);

        // 2.data
        JSONObject jsonObjectData = JSONObject.parseObject(data.toString());
        Object chinaTotal = jsonObjectData.get("chinaTotal");
        Object lastUpdateTime = jsonObjectData.get("overseaLastUpdateTime");
        System.out.println("chinaTotal:"+chinaTotal);

         // 3.total 全中国整体疫情数据
        JSONObject jsonObjectTotal = JSONObject.parseObject(chinaTotal.toString());
        Object total= jsonObjectTotal.get("total");
        System.out.println("total:"+total);

        // 4.全国数据total
        JSONObject totalData = JSONObject.parseObject(total.toString());
        Object confirm= totalData.get("confirm");
        Object input= totalData.get("input");
        Object severe= totalData.get("severe");
        Object heal= totalData.get("heal");
        Object dead= totalData.get("dead");
        Object suspect= totalData.get("suspect");

        // 5.为程序实体赋值
        ChinaTotal dataEntity = new ChinaTotal();
        dataEntity.setConfirm((Integer) confirm);
        dataEntity.setInput((Integer)input);
        dataEntity.setSevere((Integer)severe);
        dataEntity.setHeal((Integer)heal);
        dataEntity.setDead((Integer)dead);
        dataEntity.setSuspect((Integer)suspect);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dataEntity.setUpdateTime(format.parse(string.valueOf(lastUpdateTime)));

        // 6.插入数据库[更新]
        chinaTotalService.save(dataEntity);

        // 7.删除缓存【非常重要】mysql ---  redis 已执行的一个简单套路
        Jedis jedis = new Jedis("127.0.0.1");
        if (jedis!=null){
            jedis.flushDB();
        }

        /**
         * 中国各个省份数据的自动刷新
         */

        // 拿到areaTree
        JSONArray areaTree = jsonObjectData.getJSONArray("areaTree");
        Object[] objects = areaTree.toArray();

        // 遍历所有的国家
        //for (int i = 0; i < objects.length; i++) {
        //    JSONObject jsonObject1 = jsonObject.parseObject(objects[i].toString());
        //    Object name = jsonObject1.get("name");
        //   System.out.println(name);
        //}

        // 拿到中国的数据
        JSONObject jsonObject1 = JSONObject.parseObject(objects[2].toString());
        JSONArray children = jsonObject1.getJSONArray("children");
        Object[] objects1 = children.toArray();
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<NocvData> list = new ArrayList<>();
        for (int i = 0; i < objects1.length; i++) { //各个省份
            NocvData nocvData = new NocvData();
            JSONObject jsonObject2 = jsonObject.parseObject(objects1[i].toString());
            Object name = jsonObject2.get("name"); //省份名字
            Object timePro = jsonObject2.get("lastUpdateTime"); //省份更新数据时间
            Object total1 = jsonObject2.get("total");
            JSONObject jsonObject3 = jsonObject.parseObject(total1.toString());
            Object confirm1 = jsonObject3.get("confirm"); //累计确诊数量

            // 获取累计死亡人数 治愈数据
            Object heal1 = jsonObject3.get("heal"); //累计确诊数量
            Object dead1 = jsonObject3.get("dead");

            int xianConfirm = Integer.parseInt(confirm1.toString())- Integer.parseInt(heal1.toString())- Integer.parseInt(dead1.toString()) ;


            // 赋值
            nocvData.setName(name.toString());
            nocvData.setValue(xianConfirm);
            if (timePro==null){
                nocvData.setUpdateTime(new Date());
            }else {
                nocvData.setUpdateTime(format1.parse(string.valueOf(timePro)));
            }

            list.add(nocvData);
        }

        // 各个省份的数据插入数据库
        indexService.saveBatch(list);

    }
}
